home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 2 / Meeting Pearls Vol. II (1995)(GTI - Schatztruhe)[!].iso / Pearls / dev / Oberon_Interfaces / Interfaces / Exec.mod < prev    next >
Text File  |  1995-01-12  |  54KB  |  1,299 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: Exec.mod 40.15 (12.1.95) Oberon 3.6
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE Exec;
  12.  
  13. (* $IFNOT AO3r10 $Implementation- $END *)
  14.  
  15. IMPORT SYSTEM *;
  16.  
  17. (*********************************************************************
  18. *
  19. *  Format of the alert error number:
  20. *
  21. *    +-+-------------+----------------+--------------------------------+
  22. *    |D|  SubSysId   |  General Error |    SubSystem Specific Error    |
  23. *    +-+-------------+----------------+--------------------------------+
  24. *     1    7 bits          8 bits                  16 bits
  25. *
  26. *                    D:  DeadEnd alert
  27. *             SubSysId:  indicates ROM subsystem number.
  28. *        General Error:  roughly indicates what the error was
  29. *       Specific Error:  indicates more detail
  30. **********************************************************************)
  31.  
  32. (**********************************************************************
  33. *
  34. *  Hardware/CPU specific alerts:  They may show without the 8 at the
  35. *  front of the number.  These are CPU/68000 specific.        See 680x0
  36. *  programmer's manuals for more details.
  37. *
  38. **********************************************************************)
  39. CONST
  40.   acpuBusErr     * = 80000002H;      (* Hardware bus fault/access error *)
  41.   acpuAddressErr * = 80000003H;      (* Illegal address access (ie: odd) *)
  42.   acpuInstErr    * = 80000004H;      (* Illegal instruction *)
  43.   acpuDivZero    * = 80000005H;      (* Divide by zero *)
  44.   acpuCHK        * = 80000006H;      (* Check instruction error *)
  45.   acpuTRAPV      * = 80000007H;      (* TrapV instruction error *)
  46.   acpuPrivErr    * = 80000008H;      (* Privilege violation error *)
  47.   acpuTrace      * = 80000009H;      (* Trace error *)
  48.   acpuLineA      * = 8000000AH;      (* Line 1010 Emulator error *)
  49.   acpuLineF      * = 8000000BH;      (* Line 1111 Emulator error *)
  50.   acpuFormat     * = 8000000EH;      (* Stack frame format error *)
  51.   acpuSpurious   * = 80000018H;      (* Spurious interrupt error *)
  52.   acpuAutoVec1   * = 80000019H;      (* AutoVector Level 1 interrupt error *)
  53.   acpuAutoVec2   * = 8000001AH;      (* AutoVector Level 2 interrupt error *)
  54.   acpuAutoVec3   * = 8000001BH;      (* AutoVector Level 3 interrupt error *)
  55.   acpuAutoVec4   * = 8000001CH;      (* AutoVector Level 4 interrupt error *)
  56.   acpuAutoVec5   * = 8000001DH;      (* AutoVector Level 5 interrupt error *)
  57.   acpuAutoVec6   * = 8000001EH;      (* AutoVector Level 6 interrupt error *)
  58.   acpuAutoVec7   * = 8000001FH;      (* AutoVector Level 7 interrupt error *)
  59.  
  60.  
  61. (*********************************************************************
  62. *
  63. *  General Alerts
  64. *
  65. *  For example: timer.device cannot open math.library would be 0x05038015
  66. *
  67. *       Alert(AN_TimerDev|AG_OpenLib|AO_MathLib);
  68. *
  69. *********************************************************************)
  70.  
  71. CONST
  72.  
  73. (*------ alert types *)
  74.   deadEnd      * = 080000000H;
  75.   recovery     * = 000000000H;
  76.  
  77.  
  78. (*------ general purpose alert codes *)
  79.   noMemory     * = 000010000H;
  80.   makeLib      * = 000020000H;
  81.   openLib      * = 000030000H;
  82.   openDev      * = 000040000H;
  83.   openRes      * = 000050000H;
  84.   ioError      * = 000060000H;
  85.   noSignal     * = 000070000H;
  86.   badParm      * = 000080000H;
  87.   closeLib     * = 000090000H;       (* usually too many closes *)
  88.   closeDev     * = 0000A0000H;       (* or a mismatched close *)
  89.   procCreate   * = 0000B0000H;       (* Process creation failed *)
  90.  
  91.  
  92. (*------ alert objects: *)
  93.   execLib      * = 000008001H;
  94.   graphicsLib  * = 000008002H;
  95.   layersLib    * = 000008003H;
  96.   intuition    * = 000008004H;
  97.   mathLib      * = 000008005H;
  98.   dosLib       * = 000008007H;
  99.   ramLib       * = 000008008H;
  100.   iconLib      * = 000008009H;
  101.   expansionLib * = 00000800AH;
  102.   diskfontLib  * = 00000800BH;
  103.   utilityLib   * = 00000800CH;
  104.   keyMapLib    * = 00000800DH;
  105.  
  106.   audioDev     * = 000008010H;
  107.   consoleDev   * = 000008011H;
  108.   gamePortDev  * = 000008012H;
  109.   keyboardDev  * = 000008013H;
  110.   trackDiskDev * = 000008014H;
  111.   timerDev     * = 000008015H;
  112.  
  113.   ciaRsrc      * = 000008020H;
  114.   diskRsrc     * = 000008021H;
  115.   miscRsrc     * = 000008022H;
  116.  
  117.   bootStrap    * = 000008030H;
  118.   workbench    * = 000008031H;
  119.   diskCopy     * = 000008032H;
  120.   gadTools     * = 000008033H;
  121.   atUnknown    * = 000008035H;
  122.  
  123.  
  124. (*********************************************************************
  125. *
  126. *   Specific Alerts:
  127. *
  128. *   For example:   exec.library -- corrupted memory list
  129. *
  130. *         ALERT  AN_MemCorrupt        ;8100 0005
  131. *
  132. *********************************************************************)
  133.  
  134. (*------ exec.library *)
  135.   anExecLib    * = 001000000H;
  136.   excptVect    * = 001000001H;  (* 68000 exception vector checksum (obs.) *)
  137.   baseChkSum   * = 001000002H;  (* Execbase checksum (obs.) *)
  138.   libChkSum    * = 001000003H;  (* Library checksum failure *)
  139.   memCorrupt   * = 081000005H;  (* Corrupt memory list detected in FreeMem *)
  140.   intrMem      * = 081000006H;  (* No memory for interrupt servers *)
  141.   initAPtr     * = 001000007H;  (* InitStruct() of an APTR source (obs.) *)
  142.   semCorrupt   * = 001000008H;  (* A semaphore is in an illegal state
  143.                                       at ReleaseSempahore() *)
  144.   freeTwice    * = 001000009H;  (* Freeing memory already freed *)
  145.   bogusExcpt   * = 08100000AH;  (* illegal 68k exception taken (obs.) *)
  146.   ioUsedTwice  * = 00100000BH;  (* Attempt to reuse active IORequest *)
  147.   memoryInsane * = 00100000CH;  (* Sanity check on memory list failed
  148.                                       during AvailMem(MEMF_LARGEST) *)
  149.   ioAfterClose * = 00100000DH;  (* IO attempted on closed IORequest *)
  150.   stackProbe   * = 00100000EH;  (* Stack appears to extend out of range *)
  151.   badFreeAddr  * = 00100000FH;  (* Memory header not located. [ Usually an
  152.                                       invalid address passed to FreeMem() ] *)
  153.   badSemaphore * = 001000010H;  (* An attempt was made to use the old
  154.                                       message semaphores. *)
  155.  
  156. (*------ graphics.library *)
  157.   anGraphicsLib* = 002000000H;
  158.   gfxNoMem     * = 082010000H;       (* graphics out of memory *)
  159.   gfxNoMemMspc * = 082010001H;       (* MonitorSpec alloc, no memmory *)
  160.   longFrame    * = 082010006H;       (* long frame, no memory *)
  161.   shortFrame   * = 082010007H;       (* short frame, no memory *)
  162.   textTmpRas   * = 002010009H;       (* text, no memory for TmpRas *)
  163.   bltBitMap    * = 08201000AH;       (* BltBitMap, no memory *)
  164.   regionMemory * = 08201000BH;       (* regions, memory not available *)
  165.   makeVPort    * = 082010030H;       (* MakeVPort, no memory *)
  166.   gfxNewError  * = 00200000CH;
  167.   gfxFreeError * = 00200000DH;
  168.  
  169.   gfxNoLCM     * = 082011234H;       (* emergency memory not available *)
  170.  
  171.   obsoleteFont * = 002000401H;       (* unsupported font description used *)
  172.  
  173. (*------ layers.library *)
  174.   anLayersLib  * = 003000000H;
  175.   layersNoMem  * = 083010000H;       (* layers out of memory *)
  176.  
  177. (*------ intuition.library *)
  178.   anIntuition  * = 004000000H;
  179.   gadgetType   * = 084000001H;   (* unknown gadget type *)
  180.   badGadget    * = 004000001H;   (* Recovery form of GadgetType *)
  181.   createPort   * = 084010002H;   (* create port, no memory *)
  182.   itemAlloc    * = 004010003H;   (* item plane alloc, no memory *)
  183.   subAlloc     * = 004010004H;   (* sub alloc, no memory *)
  184.   planeAlloc   * = 084010005H;   (* plane alloc, no memory *)
  185.   itemBoxTop   * = 084000006H;   (* item box top < RelZero *)
  186.   openScreen   * = 084010007H;   (* open screen, no memory *)
  187.   openScrnRast * = 084010008H;   (* open screen, raster alloc, no memory *)
  188.   sysScrnType  * = 084000009H;   (* open sys screen, unknown type *)
  189.   addSWGadget  * = 08401000AH;   (* add SW gadgets, no memory *)
  190.   openWindow   * = 08401000BH;   (* open window, no memory *)
  191.   badState     * = 08400000CH;   (* Bad State Return entering Intuition *)
  192.   badMessage   * = 08400000DH;   (* Bad Message received by IDCMP *)
  193.   weirdEcho    * = 08400000EH;   (* Weird echo causing incomprehension *)
  194.   noConsole    * = 08400000FH;   (* couldn't open the Console Device *)
  195.   noISem       * = 004000010H;   (* Intuition skipped obtaining a sem *)
  196.   iSemOrder    * = 004000011H;   (* Intuition obtained a sem in bad order *)
  197.  
  198. (*------ math.library *)
  199.   anMathLib    * = 005000000H;
  200.  
  201. (*------ dos.library *)
  202.   anDosLib     * = 007000000H;
  203.   startMem     * = 007010001H;  (* no memory at startup *)
  204.   endTask      * = 007000002H;  (* EndTask didn't *)
  205.   qPktFail     * = 007000003H;  (* Qpkt failure *)
  206.   asyncPkt     * = 007000004H;  (* Unexpected packet received *)
  207.   freeVec      * = 007000005H;  (* Freevec failed *)
  208.   diskBlkSeq   * = 007000006H;  (* Disk block sequence error *)
  209.   bitMap       * = 007000007H;  (* Bitmap corrupt *)
  210.   keyFree      * = 007000008H;  (* Key already free *)
  211.   badChkSum    * = 007000009H;  (* Invalid checksum *)
  212.   diskError    * = 00700000AH;  (* Disk Error *)
  213.   keyRange     * = 00700000BH;  (* Key out of range *)
  214.   badOverlay   * = 00700000CH;  (* Bad overlay *)
  215.   badInitFunc  * = 00700000DH;  (* Invalid init packet for cli/shell *)
  216.   fileReclosed * = 00700000EH;  (* A filehandle was closed more than once *)
  217.  
  218. (*------ ramlib.library *)
  219.   anRAMLib     * = 008000000H;
  220.   badSegList   * = 008000001H;       (* no overlays in library seglists *)
  221.  
  222. (*------ icon.library *)
  223.   anIconLib    * = 009000000H;
  224.  
  225. (*------ expansion.library *)
  226.   anExpansionLib    * = 00A000000H;
  227.   badExpansionFree  * = 00A000001H;  (* freeed free region *)
  228.  
  229. (*------ diskfont.library *)
  230.   anDiskfontLib* = 00B000000H;
  231.  
  232. (*------ audio.device *)
  233.   anAudioDev   * = 010000000H;
  234.  
  235. (*------ console.device *)
  236.   anConsoleDev * = 011000000H;
  237.   noWindow     * = 011000001H;       (* Console can't open initial window *)
  238.  
  239. (*------ gameport.device *)
  240.   anGamePortDev* = 012000000H;
  241.  
  242. (*------ keyboard.device *)
  243.   anKeyboardDev* = 013000000H;
  244.  
  245. (*------ trackdisk.device *)
  246.   anTrackDiskDev* = 014000000H;
  247.   tdCalibSeek  * = 014000001H;       (* calibrate: seek error *)
  248.   tdDelay      * = 014000002H;       (* delay: error on timer wait *)
  249.  
  250. (*------ timer.device *)
  251.   anTimerDev   * = 015000000H;
  252.   tmBadReq     * = 015000001H;  (* bad request *)
  253.   tmBadSupply  * = 015000002H;  (* power supply -- no 50/60Hz ticks *)
  254.  
  255. (*------ cia.resource *)
  256.   anCIARsrc    * = 020000000H;
  257.  
  258. (*------ disk.resource *)
  259.   anDiskRsrc   * = 021000000H;
  260.   drHasDisk    * = 021000001H;       (* get unit: already has disk *)
  261.   drIntNoAct   * = 021000002H;       (* interrupt: no active unit *)
  262.  
  263. (*------ misc.resource *)
  264.   anMiscRsrc   * = 022000000H;
  265.  
  266. (*------ bootstrap *)
  267.   anBootStrap  * = 030000000H;
  268.   bootError    * = 030000001H;       (* boot code returned an error *)
  269.  
  270. (*------ Workbench *)
  271.   anWorkbench                  * = 031000000H;
  272.   noFonts                      * = 0B1000001H;
  273.   wbBadStartupMsg1             * = 031000001H;
  274.   wbBadStartupMsg2             * = 031000002H;
  275.   wbBadIOMsg                   * = 031000003H;  (* Hacker code? *)
  276.   wbReLayoutToolMenu           * = 0B1010009H;  (* GadTools broke? *)
  277.  
  278. (* no longer used since V39 *)
  279.   wbInitPotionAllocDrawer      * = 0B1010004H;
  280.   wbCreateWBMenusCreateMenus1  * = 0B1010005H;
  281.   wbCreateWBMenusCreateMenus2  * = 0B1010006H;
  282.   wbLayoutWBMenusLayoutMenus   * = 0B1010007H;
  283.   wbAddToolMenuItem            * = 0B1010008H;
  284.   wbinitTimer                  * = 0B101000AH;
  285.   wbInitLayerDemon             * = 0B101000BH;
  286.   wbinitWbGels                 * = 0B101000CH;
  287.   wbInitScreenAndWindows1      * = 0B101000DH;
  288.   wbInitScreenAndWindows2      * = 0B101000EH;
  289.   wbInitScreenAndWindows3      * = 0B101000FH;
  290.   wbMAlloc                     * = 0B1010010H;
  291.  
  292. (*------ DiskCopy *)
  293.   anDiskCopy   * = 032000000H;
  294.  
  295. (*------ toolkit for Intuition *)
  296.   anGadTools   * = 033000000H;
  297.  
  298. (*------ System utility library *)
  299.   anUtilityLib * = 034000000H;
  300.  
  301. (*------ For use by any application that needs it *)
  302.   anUnknown    * = 035000000H;
  303.  
  304.  
  305.  
  306. CONST
  307.  
  308.   includeVersion * = 40; (* Version of the include files in use. (Do not
  309.                               use this label for OpenLibrary() calls!) *)
  310.  
  311. TYPE
  312.   ADDRESS  * = SYSTEM.ADDRESS;  (* 32-bit untyped pointer *)
  313.   APTR     * = ADDRESS;
  314.   BPTR     * = BPOINTER TO LONGINT;
  315.  
  316.   LONG     * = LONGINT;  (* signed 32-bit quantity *)
  317.   ULONG    * = LONGINT;  (* unsigned 32-bit quantity, be careful with this! *)
  318.   LONGBITS * = LONGSET;  (* 32 bits manipulated individually *)
  319.   WORD     * = INTEGER;  (* signed 16-bit quantity *)
  320.   UWORD    * = INTEGER;  (* unsigned 16-bit quantity, be careful with this! *)
  321.   WORDBITS * = SET;      (* 16 bits manipulated individually *)
  322.   BYTE     * = SYSTEM.BYTE; (* 8-bit quantity *)
  323.   SBYTE    * = SHORTINT; (* signed 8-bit quantity *)
  324.   UBYTE    * = BYTE;     (* unsigned 8-bit quantity *)
  325.   BYTEBITS * = SHORTSET; (* 8 bits manipulated individually *)
  326.   RPTR     * = INTEGER;  (* signed relative pointer *)
  327.   STRING   * = ARRAY 256 OF CHAR; (* general String type *)
  328.   STRPTR   * = UNTRACED POINTER TO STRING;
  329.                          (* string pointer (NULL terminated) *)
  330.   LSTRPTR  * = UNTRACED POINTER TO ARRAY MAX(LONGINT)-1 OF CHAR;
  331.                          (* string pointer (NULL terminated) *)
  332.   LONGBOOL * = LONGINT;
  333.  
  334.   PROC     * = PROCEDURE;
  335.  
  336. (* Types with specific semantics *)
  337.   FLOAT    * = REAL;
  338.   DOUBLE   * = LONGREAL;
  339.   SINGLE   * = LONGSET;  (* single precision real number, set type avoids intermix *)
  340.   BOOL     * = INTEGER;
  341.   TEXT     * = CHAR;
  342.  
  343. CONST
  344.   true     * = 1;
  345.   false    * = 0;
  346.   LTRUE    * = -1;
  347.   LFALSE   * = 0;
  348.  
  349.   null     * = NIL;
  350.   NILSTR   * = NIL;  (* pass this to formal parameters ARRAY OF CHAR
  351.                         for passing _no_ string (lib-calls only)  *)
  352.   EMPTYSTR * = "";   (* and this one for passing an emptry string *)
  353.  
  354.   byteMask * = 255;
  355.  
  356.  
  357. (* LIBRARY_VERSION is now obsolete.  Please use LIBRARY_MINIMUM *)
  358. (* or code the specific minimum library version you require.    *)
  359.   libraryMinimum * = 33; (* Lowest version supported by Commodore-Amiga *)
  360.  
  361. TYPE
  362.  
  363. (* Pointers: *)
  364.   NodePtr           * = UNTRACED POINTER TO Node;
  365.   MinNodePtr        * = UNTRACED POINTER TO MinNode;
  366.   ListPtr           * = UNTRACED POINTER TO List;
  367.   MinListPtr        * = UNTRACED POINTER TO MinList;
  368.   TaskPtr           * = UNTRACED POINTER TO Task;
  369.   StackSwapStructPtr* = UNTRACED POINTER TO StackSwapStruct;
  370.   MsgPortPtr        * = UNTRACED POINTER TO MsgPort;
  371.   MsgPortSoftIntPtr * = UNTRACED POINTER TO MsgPortSoftInt;
  372.   MessagePtr        * = UNTRACED POINTER TO Message;
  373.   InterruptPtr      * = UNTRACED POINTER TO Interrupt;
  374.   LibraryPtr        * = UNTRACED POINTER TO Library;
  375.   DevicePtr         * = UNTRACED POINTER TO Device;
  376.   UnitPtr           * = UNTRACED POINTER TO Unit;
  377.   IntVectorPtr      * = UNTRACED POINTER TO IntVector;
  378.   SoftIntListPtr    * = UNTRACED POINTER TO SoftIntList;
  379.   ExecBasePtr       * = UNTRACED POINTER TO ExecBase;
  380.   IORequestPtr      * = UNTRACED POINTER TO IORequest;
  381.   IOStdReqPtr       * = UNTRACED POINTER TO IOStdReq;
  382.   MemChunkPtr       * = UNTRACED POINTER TO MemChunk;
  383.   MemHeaderPtr      * = UNTRACED POINTER TO MemHeader;
  384.   MemEntryPtr       * = UNTRACED POINTER TO MemEntry;
  385.   MemListPtr        * = UNTRACED POINTER TO MemList;
  386.   MemPoolPtr        * = UNTRACED POINTER TO MemPool;
  387.   ResidentPtr       * = UNTRACED POINTER TO Resident;
  388.   SemaphoreRequestPtr * = UNTRACED POINTER TO SemaphoreRequest;
  389.   SemaphoreMessagePtr * = UNTRACED POINTER TO SemaphoreMessagePtr;
  390.   SignalSemaphorePtr* = UNTRACED POINTER TO SignalSemaphore;
  391.   SemaphorePtr      * = UNTRACED POINTER TO Semaphore;
  392.  
  393. TYPE
  394.  
  395. (*
  396.  * Type compatible to MinNode and Node:
  397.  *)
  398.   CommonNode * = STRUCT END;
  399.   CommonNodePtr * = UNTRACED POINTER TO CommonNode;
  400.  
  401. (*
  402.  *  List Node Structure.  Each member in a list starts with a Node
  403.  *)
  404.  
  405.  
  406.   Node * = STRUCT (dummy *: CommonNode)
  407.     succ * : NodePtr;           (* Pointer to next (successor) *)
  408.     pred * : NodePtr;           (* Pointer to previous (predecessor) *)
  409.     type * : SHORTINT;
  410.     pri  * : SHORTINT;          (* Priority, for sorting *)
  411.     name * : LSTRPTR;           (* ID string, null terminated *)
  412.   END;  (* Note: word aligned *)
  413.  
  414. (* minimal node -- no type checking possible *)
  415.   MinNode * = STRUCT (dummy *: CommonNode)
  416.     succ * : MinNodePtr;
  417.     pred * : MinNodePtr;
  418.   END;
  419.  
  420.  
  421. (*
  422. ** Note: Newly initialized IORequests, and software interrupt structures
  423. ** used with Cause(), should have type NT_UNKNOWN.  The OS will assign a type
  424. ** when they are first used.
  425. *)
  426.  
  427. CONST
  428.  
  429. (*----- Node Types for LN_TYPE -----*)
  430.   unknown      * = 0;
  431.   task         * = 1;       (* Exec task *)
  432.   interrupt    * = 2;
  433.   device       * = 3;
  434.   msgPort      * = 4;
  435.   message      * = 5;       (* Indicates message currently pending *)
  436.   freeMsg      * = 6;
  437.   replyMsg     * = 7;       (* Message has been replied *)
  438.   resource     * = 8;
  439.   library      * = 9;
  440.   memory       * = 10;
  441.   softInt      * = 11;      (* Internal flag used by SoftInits *)
  442.   font         * = 12;
  443.   process      * = 13;      (* AmigaDOS Process *)
  444.   semaphore    * = 14;
  445.   signalSem    * = 15;      (* signal semaphores *)
  446.   bootNode     * = 16;
  447.   kickMem      * = 17;
  448.   graphics     * = 18;
  449.   deathMessage * = 19;
  450.   user         * = 254;     (* User node types work down from here *)
  451.   extended     * = 255;
  452.  
  453. TYPE
  454.  
  455. (*
  456.  * Type compatible to MinList and List:
  457.  *)
  458.   CommonList * = STRUCT END;
  459.   CommonListPtr * = UNTRACED POINTER TO CommonList;
  460.  
  461. (*
  462.  *  Full featured list header.
  463.  *)
  464.  
  465.   List * = STRUCT (dummy *: CommonList)
  466.     head * : NodePtr;
  467.     tail * : NodePtr;
  468.     tailPred * : NodePtr;
  469.     type * : SHORTINT;
  470.     pad  * : BYTE;
  471.   END;     (* word aligned *)
  472.  
  473.  
  474. (*
  475.  * Minimal List Header - no type checking
  476.  *)
  477.   MinList * = STRUCT (dummy *: CommonList)
  478.    head*, tail*, tailPred*: MinNodePtr;
  479.   END;    (* longword aligned *)
  480.  
  481.  
  482. (* Please use Exec functions to modify task structure fields, where available.
  483.  *)
  484.   Task * = STRUCT (node* : Node)
  485.     flags * : SHORTSET;
  486.     state * : SHORTSET;
  487.     idNestCnt * : SHORTINT;         (* intr disabled nesting*)
  488.     tdNestCnt * : SHORTINT;         (* task disabled nesting*)
  489.     sigAlloc  * : LONGSET;          (* sigs allocated *)
  490.     sigWait   * : LONGSET;          (* sigs we are waiting for *)
  491.     sigRecvd  * : LONGSET;          (* sigs we have received *)
  492.     sigExcept * : LONGSET;          (* sigs we will take excepts for *)
  493.     trapAlloc * : SET;              (* traps allocated *)
  494.     trapAble  * : SET;              (* traps enabled *)
  495.     exceptData* : APTR;             (* points to except data *)
  496.     exceptCode* : PROC;             (* points to except code *)
  497.     trapData  * : APTR;             (* points to trap code *)
  498.     trapCode  * : PROC;             (* points to trap data *)
  499.     spReg     * : APTR;             (* stack pointer        *)
  500.     spLower   * : APTR;             (* stack lower bound    *)
  501.     spUpper   * : APTR;             (* stack upper bound + 2*)
  502.     switch    * : PROC;             (* task losing CPU    *)
  503.     launch    * : PROC;             (* task getting CPU  *)
  504.     memEntry  * : List;             (* Allocated memory. Freed by RemTask() *)
  505.     userData  * : APTR;             (* For use by the task; no restrictions! *)
  506.   END;
  507.  
  508. (*
  509.  * Stack swap structure as passed to StackSwap()
  510.  *)
  511.   StackSwapStruct * = STRUCT
  512.     lower * : APTR;             (* Lowest byte of stack *)
  513.     upper * : LONGINT;          (* Upper end of stack (size + Lowest) *)
  514.     pointer * : APTR;           (* Stack pointer at switch point *)
  515.   END;
  516.  
  517. CONST
  518. (*----- Flag Bits ------------------------------------------*)
  519. (* Task.flags: *)
  520.   procTime     * = 0;
  521.   eTask        * = 3;
  522.   stackChk     * = 4;
  523.   exception    * = 5;
  524.   switch       * = 6;
  525.   launch       * = 7;
  526.  
  527. (*----- Task States ----------------------------------------*)
  528. (* Task.state *)
  529.   inval        * = 0;
  530.   added        * = 1;
  531.   run          * = 2;
  532.   ready        * = 3;
  533.   wait         * = 4;
  534.   except       * = 5;
  535.   removed      * = 6;
  536.  
  537. (*----- Predefined Signals -------------------------------------*)
  538.   sigAbort      * = 0;
  539.   sigChild      * = 1;
  540.   sigBlit       * = 4;       (* Note: same as SINGLE *)
  541.   sigSingle     * = 4;       (* Note: same as BLIT *)
  542.   sigIntuition  * = 5;
  543.   sigNet        * = 7;
  544.   sigDos        * = 8;
  545.  
  546.  
  547. TYPE
  548.  
  549. (****** MsgPort *****************************************************)
  550.  
  551.   MsgPort * = STRUCT (node * : Node)
  552.     flags * : SHORTINT;
  553.     sigBit * : SHORTINT;        (* signal bit number    *)
  554.     sigTask* : TaskPtr;         (* object to be signalled *)
  555.     msgList* : List;            (* message linked list  *)
  556.   END;
  557.  
  558.   MsgPortSoftInt * = STRUCT (node * : Node)
  559.     flags * : SHORTINT;
  560.     sigBit * : SHORTINT;        (* signal bit number    *)
  561.     softInt* : InterruptPtr;    (* object to be signalled *)
  562.     msgList* : List;            (* message linked list  *)
  563.   END;
  564.  
  565. CONST
  566.  
  567. (* MsgPort.flags: Port arrival actions (PutMsg) *)
  568.   signal     * = 0;       (* Signal task in mp_SigTask *)
  569.   softint    * = 1;       (* Signal SoftInt in mp_SoftInt/mp_SigTask *)
  570.   ignore     * = 2;       (* Ignore arrival *)
  571.  
  572. TYPE
  573.  
  574. (****** Message *****************************************************)
  575.  
  576.   Message * = STRUCT (node * : Node)
  577.     replyPort * : MsgPortPtr;  (* message reply port *)
  578.     length * : INTEGER;        (* total message length, in bytes *)
  579.                                (* (include the size of the Message *)
  580.                                (* structure in the length) *)
  581.   END;
  582.  
  583. CONST
  584.  
  585. (*------ Special Constants ---------------------------------------*)
  586.   vectSize    * = 6;      (* Each library entry takes 6 bytes *)
  587.   reserved    * = 4;      (* Exec reserves the first 4 vectors *)
  588.   base        * = -vectSize;
  589.   userDef     * = base-reserved*vectSize;
  590.   nonStd      * = userDef;
  591.  
  592. (*------ Standard Functions --------------------------------------*)
  593.   open        * = - 6;
  594.   close       * = -12;
  595.   expunge     * = -18;
  596.   extFunc     * = -24;   (* for future expansion *)
  597.  
  598. TYPE
  599.  
  600. (*------ Library Base Structure ----------------------------------*)
  601. (* Also used for Devices and some Resources *)
  602.   Library * = STRUCT (node * : Node)
  603.     flags * : SHORTSET;
  604.     pad   * : BYTE;
  605.     negSize * : INTEGER;            (* number of bytes before library *)
  606.     posSize * : INTEGER;            (* number of bytes after library *)
  607.     version * : INTEGER;            (* major *)
  608.     revision* : INTEGER;            (* minor *)
  609.     idString* : LSTRPTR;            (* ASCII identification *)
  610.     sum     * : LONGINT;            (* the checksum itself *)
  611.     openCnt * : INTEGER;            (* number of current opens *)
  612.   END;  (* Warning: size is not a longword multiple! *)
  613.  
  614. CONST
  615.  
  616. (* Library.flags bit definitions (all others are system reserved) *)
  617.   summing * = 0;       (* we are currently checksumming *)
  618.   changed * = 1;       (* we have just changed the lib *)
  619.   sumUsed * = 2;       (* set if we should bother to sum *)
  620.   delExp  * = 3;       (* delayed expunge *)
  621.  
  622. TYPE
  623.  
  624. (****** Device ******************************************************)
  625.  
  626.   Device * = STRUCT (library * : Library) END;
  627.  
  628.  
  629. (****** Unit ********************************************************)
  630.  
  631.   Unit * = STRUCT (msgPort * : MsgPort) (* queue for unprocessed messages *)
  632.                                         (* instance of msgport is recommended *)
  633.     flags   * : SHORTSET;
  634.     pad     * : BYTE;
  635.     openCnt * : INTEGER;                (* number of active opens *)
  636.   END;
  637.  
  638.  
  639. CONST
  640.  
  641. (* Unit.flags *)
  642.   active   * = 0;
  643.   inTask   * = 1;
  644.  
  645.  
  646. (* errors: *)
  647.   openFail    * = -1; (* device/unit failed to open *)
  648.   aborted     * = -2; (* request terminated early [after AbortIO()] *)
  649.   noCmd       * = -3; (* command not supported by device *)
  650.   badLength   * = -4; (* not a valid length (usually IO_LENGTH) *)
  651.   badAddress  * = -5; (* invalid address (misaligned or bad range) *)
  652.   unitBusy    * = -6; (* device opens ok, but requested unit is busy *)
  653.   selfTest    * = -7; (* hardware failed self-test *)
  654.  
  655.  
  656. TYPE
  657.  
  658.   Interrupt * = STRUCT (node * : Node)
  659.     data * : APTR;               (* server data segment  *)
  660.     code * : PROC;               (* server code entry    *)
  661.   END;
  662.  
  663.  
  664.   IntVector * = STRUCT           (* For EXEC use ONLY! *)
  665.     data * : APTR;
  666.     code * : PROC;
  667.     node * : NodePtr;
  668.   END;
  669.  
  670.  
  671.   SoftIntList * = STRUCT (list * : List)   (* For EXEC use ONLY! *)
  672.     pad  * : INTEGER;
  673.   END;
  674.  
  675.  
  676. CONST
  677.  
  678. (* this is a fake INT definition, used only for AddIntServer and the like *)
  679.   nmi * = 15;
  680.  
  681.  
  682. TYPE
  683.  
  684. (* Definition of the Exec library base structure (pointed to by location 4).
  685. ** Most fields are not to be viewed or modified by user programs.  Use
  686. ** extreme caution.
  687. *)
  688.   ExecBase * = STRUCT (libNode * : Library) (* Standard library node *)
  689.  
  690. (******** Static System Variables ********)
  691.  
  692.         softVer      * : INTEGER; (* obsolete! kickstart release number *)
  693.         lowMemChkSum * : INTEGER; (* checksum of 68000 trap vectors *)
  694.         chkBase      * : LONGINT; (* system base pointer complement *)
  695.         coldCapture  * : APTR;    (* coldstart soft capture vector *)
  696.         coolCapture  * : APTR;    (* coolstart soft capture vector *)
  697.         warmCapture  * : APTR;    (* warmstart soft capture vector *)
  698.         sysStkUpper  * : APTR;    (* system stack base   (upper bound) *)
  699.         sysStkLower  * : APTR;    (* top of system stack (lower bound) *)
  700.         maxLocMem    * : APTR;    (* top of chip memory *)
  701.         debugEntry   * : APTR;    (* global debugger entry point *)
  702.         debugData    * : APTR;    (* global debugger data segment *)
  703.         alertData    * : APTR;    (* alert data segment *)
  704.         maxExtMem    * : APTR;    (* top of extended mem, or null if none *)
  705.  
  706.         chkSum       * : INTEGER; (* for all of the above (minus 2) *)
  707.  
  708. (****** Interrupt Related ***************************************)
  709.  
  710.         intVects    * : ARRAY 16 OF IntVector;
  711.  
  712. (****** Dynamic System Variables *************************************)
  713.  
  714.         thisTask       * : TaskPtr;  (* pointer to current task (readable) *)
  715.  
  716.         idleCount      * : LONGINT;  (* idle counter *)
  717.         dispCount      * : LONGINT;  (* dispatch counter *)
  718.         quantum        * : INTEGER;  (* time slice quantum *)
  719.         elapsed        * : INTEGER;  (* current quantum ticks *)
  720.         sysFlags       * : SET;      (* misc internal system flags *)
  721.         idNestCnt      * : SHORTINT; (* interrupt disable nesting count *)
  722.         tdNestCnt      * : SHORTINT; (* task disable nesting count *)
  723.  
  724.         attnFlags      * : SET;      (* special attention flags (readable) *)
  725.  
  726.         attnResched    * : INTEGER;  (* rescheduling attention *)
  727.         resModules     * : APTR;     (* resident module array pointer *)
  728.         taskTrapCode   * : PROC;
  729.         taskExceptCode * : PROC;
  730.         taskExitCode   * : PROC;
  731.         taskSigAlloc   * : LONGSET;
  732.         taskTrapAlloc  * : SET;
  733.  
  734.  
  735. (****** System Lists (private!) ********************************)
  736.  
  737.         memList      - : List;
  738.         resourceList - : List;
  739.         deviceList   - : List;
  740.         intrList     - : List;
  741.         libList      - : List;
  742.         portList     - : List;
  743.         taskReady    - : List;
  744.         taskWait     - : List;
  745.  
  746.         softInts     - : ARRAY 5 OF SoftIntList;
  747.  
  748. (****** Other Globals *******************************************)
  749.  
  750.         lastAlert    - : ARRAY 4 OF LONGINT;
  751.  
  752.         (* these next two variables are provided to allow
  753.         ** system developers to have a rough idea of the
  754.         ** period of two externally controlled signals --
  755.         ** the time between vertical blank interrupts and the
  756.         ** external line rate (which is counted by CIA A's
  757.         ** "time of day" clock).  In general these values
  758.         ** will be 50 or 60, and may or may not track each
  759.         ** other.  These values replace the obsolete AFB_PAL
  760.         ** and AFB_50HZ flags.
  761.         *)
  762.         vblankFrequency      - : SHORTINT;   (* (readable) *)
  763.         powerSupplyFrequency - : SHORTINT;   (* (readable) *)
  764.  
  765.         semaphoreList        - : List;
  766.  
  767.         (* these next two are to be able to kickstart into user ram.
  768.         ** KickMemPtr holds a singly linked list of MemLists which
  769.         ** will be removed from the memory list via AllocAbs.  If
  770.         ** all the AllocAbs's succeeded, then the KickTagPtr will
  771.         ** be added to the rom tag list.
  772.         *)
  773.         kickMemPtr   * : APTR;   (* ptr to queue of mem lists *)
  774.         kickTagPtr   * : APTR;   (* ptr to rom tag queue *)
  775.         kickCheckSum * : APTR;   (* checksum for mem and tags *)
  776.  
  777. (****** V36 Exec additions start here **************************************)
  778.  
  779.         pad0            : INTEGER; (* Private internal use *)
  780.         launchPoint     : LONGINT; (* Private to Launch/Switch *)
  781.         ramLibPrivate   : APTR;
  782.         (* The next ULONG contains the system "E" clock frequency,
  783.         ** expressed in Hertz.  The E clock is used as a timebase for
  784.         ** the Amiga's 8520 I/O chips. (E is connected to "02").
  785.         ** Typical values are 715909 for NTSC, or 709379 for PAL.
  786.         *)
  787.         eClockFrequency - : LONGINT;  (* (readable) *)
  788.         cacheControl      : APTR;     (* Private to CacheControl calls *)
  789.         taskID          * : LONGINT;  (* Next available task ID *)
  790.  
  791.         reserved1       * : ARRAY 5 OF LONGINT;
  792.  
  793.         mmuLock           : APTR;     (* private *)
  794.  
  795.         reserved2       * : ARRAY 3 OF LONGINT;
  796.  
  797. (****** V39 Exec additions start here **************************************)
  798.  
  799.         (* The following list and data element are used
  800.          * for V39 exec's low memory handler...
  801.          *)
  802.         memHandlers    *: MinList;  (* The handler list *)
  803.         memHandler      : APTR;     (* Private! handler pointer *)
  804.       END;
  805.  
  806. CONST
  807. (****** Bit defines for AttnFlags (see above) ******************************)
  808.  
  809. (*  Processors and Co-processors: *)
  810. (* ExecBase.attnFlags *)
  811.   m68010     * = 0;       (* also set for 68020 *)
  812.   m68020     * = 1;       (* also set for 68030 *)
  813.   m68030     * = 2;       (* also set for 68040 *)
  814.   m68040     * = 3;
  815.   m68881     * = 4;       (* also set for 68882 *)
  816.   m68882     * = 5;
  817.  
  818.  
  819. (****** Selected flag definitions for Cache manipulation calls **********)
  820.  
  821.   enableI       * = 0;  (* Enable instruction cache *)
  822.   freezeI       * = 1;  (* Freeze instruction cache *)
  823.   clearI        * = 3;  (* Clear instruction cache  *)
  824.   ibe           * = 4;  (* Instruction burst enable *)
  825.   enableD       * = 8;  (* 68030 Enable data cache  *)
  826.   freezeD       * = 9;  (* 68030 Freeze data cache  *)
  827.   clearD        * = 11; (* 68030 Clear data cache   *)
  828.   dbe           * = 12; (* 68030 Data burst enable *)
  829.   writeAllocate * = 13; (* 68030 Write-Allocate mode (must always be set!) *)
  830.   enableE       * = 30; (* Master enable for external caches
  831.                          * External caches should track the
  832.                          * state of the internal caches
  833.                          * such that they do not cache anything
  834.                          * that the internal cache turned off for. *)
  835.   copyBack      * = 31; (* Master enable for copyback caches *)
  836.  
  837.   dmaContinue    * = 1; (* Continuation flag for CachePreDMA *)
  838.   dmaNoModify    * = 2; (* Set if DMA does not update memory *)
  839.   dmaReadFromRAM * = 3; (* Set if DMA goes *FROM* RAM to device *)
  840.  
  841. TYPE
  842.  
  843.   IORequest * = STRUCT (message * : Message)
  844.     device  * : DevicePtr;    (* device node pointer  *)
  845.     unit    * : UnitPtr;      (* unit (driver private)*)
  846.     command * : INTEGER;      (* device command *)
  847.     flags   * : SHORTSET;
  848.     error   * : SHORTINT;     (* error or warning num *)
  849.   END;
  850.  
  851.   IOStdReq * = STRUCT (message * : Message)
  852.     device  * : DevicePtr;    (* device node pointer  *)
  853.     unit    * : UnitPtr;      (* unit (driver private)*)
  854.     command * : INTEGER;      (* device command *)
  855.     flags   * : SHORTSET;
  856.     error   * : SHORTINT;     (* error or warning num *)
  857.     actual  * : LONGINT;      (* actual number of bytes transferred *)
  858.     length  * : LONGINT;      (* requested number bytes transferred*)
  859.     data    * : APTR;         (* points to data area *)
  860.     offset  * : LONGINT;      (* offset for block structured devices *)
  861.   END;
  862.  
  863. CONST
  864.  
  865. (* library vector offsets for device reserved vectors *)
  866.   beginIO  * = -30;
  867.   abortIO  * = -36;
  868.  
  869. (* io_Flags defined bits *)
  870.   quick    * =   0;
  871.  
  872. (* IORequest.command: *)
  873.   invalid    * = 0;
  874.   reset      * = 1;
  875.   read       * = 2;
  876.   write      * = 3;
  877.   update     * = 4;
  878.   clear      * = 5;
  879.   stop       * = 6;
  880.   start      * = 7;
  881.   flush      * = 8;
  882.  
  883.   nonstd     * = 9;
  884.  
  885. TYPE
  886.  
  887. (****** MemChunk ****************************************************)
  888.  
  889.   MemChunk * = STRUCT
  890.     next * : MemChunkPtr;  (* pointer to next chunk *)
  891.     bytes* : LONGINT;      (* chunk byte size      *)
  892.   END;
  893.  
  894.  
  895. (****** MemHeader ***************************************************)
  896.  
  897.   MemHeader * = STRUCT (node * : Node)
  898.     attributes * : SET;         (* characteristics of this region *)
  899.     first * : MemChunkPtr;      (* first free region            *)
  900.     lower * : APTR;             (* lower memory bound           *)
  901.     upper * : APTR;             (* upper memory bound+1 *)
  902.     free  * : LONGINT;          (* total number of free bytes   *)
  903.   END;
  904.  
  905.  
  906. (****** MemEntry ****************************************************)
  907.  
  908.   MemEntry * = STRUCT
  909.     addr  * : APTR;      (* the address of this memory region      *)
  910.                          (* or: LONGSET, the AllocMem requirements *)
  911.     length* : LONGINT    (* the length of this memory region *)
  912.   END;
  913.  
  914.  
  915. (****** MemList *****************************************************)
  916.  
  917. (* Note: sizeof(struct MemList) includes the size of the first MemEntry! *)
  918.   MemList * = STRUCT (node * : Node)
  919.     numEntries * : INTEGER;            (* number of entries in this struct *)
  920. (*  me: ARRAY numEntries OF MemEntry;  (* the entries                      *) *)
  921.   END;
  922.  
  923. CONST
  924.  
  925. (*----- Memory Requirement Types ---------------------------*)
  926. (*----- See the AllocMem() documentation for details--------*)
  927.  
  928.   any         * =  LONGSET{};    (* Any type of memory will do *)
  929.   public      * =  0;
  930.   chip        * =  1;
  931.   fast        * =  2;
  932.   local       * =  8;
  933.   mem24BitDMA * =  9;   (* DMAable memory within 24 bits of address *)
  934.   kick        * = 10;   (* Memory that can be used for KickTags *)
  935.  
  936.   memClear    * = 16;
  937.   largest     * = 17;
  938.   reverse     * = 18;
  939.   total       * = 19;   (* AvailMem: return total size of memory *)
  940.  
  941.   noExpunge   * = 31;   (* AllocMem: Do not cause expunge on failure *)
  942.  
  943.   (*----- Current alignment rules for memory blocks (may increase) -----*)
  944.   blockSize   * = 8;
  945.   blockMask   * = blockSize-1;
  946.  
  947. TYPE
  948.   MemPool * = STRUCT END; (* dummy for memory pools *)
  949.  
  950. (****** MemHandlerData **********************************************)
  951. (* Note:  This structure is *READ ONLY* and only EXEC can create it!*)
  952. TYPE
  953.   MemHandlerData * = STRUCT
  954.     requestSize  -: LONGINT;      (* Requested allocation size *)
  955.     requestFlags -: LONGSET;      (* Requested allocation flags *)
  956.     flags        -: LONGSET;      (* Flags (see below) *)
  957.   END;
  958.  
  959. CONST
  960.   recycle *= 0; (* 0==First time, 1==recycle *)
  961.  
  962. (****** Low Memory handler return values ***************************)
  963.   didNothing * =  0;    (* Nothing we could do... *)
  964.   allDone    * = -1;    (* We did all we could do *)
  965.   tryAgain   * =  1;    (* We did some, try the allocation again *)
  966.  
  967. TYPE
  968.   Resident * = STRUCT
  969.     matchWord * : INTEGER;     (* word to match on (ILLEGAL)   *)
  970.     matchTag  * : ResidentPtr; (* pointer to the above       *)
  971.     endSkip   * : APTR;        (* address to continue scan     *)
  972.     flags     * : SHORTSET;    (* various tag flags            *)
  973.     version   * : SHORTINT;    (* release version number       *)
  974.     type      * : SHORTINT;    (* type of module (NT_XXXXXX)   *)
  975.     pri       * : SHORTINT;    (* initialization priority *)
  976.     name      * : LSTRPTR;     (* pointer to node name *)
  977.     idString  * : LSTRPTR;     (* pointer to identification string *)
  978.     init      * : APTR;        (* pointer to init code *)
  979.   END;
  980.  
  981.  
  982. CONST
  983.  
  984.   matchWord  * = 4AFCH;  (* The 68000 "ILLEGAL" instruction *)
  985.  
  986. (* Resident.flags: *)
  987.   autoinit   * = 7;  (* rt_Init points to data structure *)
  988.   afterDos   * = 2;
  989.   singleTask * = 1;
  990.   coldStart  * = 0;
  991.  
  992. TYPE
  993. (****** SignalSemaphore *********************************************)
  994.  
  995. (* Private structure used by ObtainSemaphore() *)
  996.   SemaphoreRequest * = STRUCT (link - : MinNode)
  997.     waiter - : TaskPtr;
  998.   END;
  999.  
  1000. (* Signal Semaphore data structure *)
  1001.   SignalSemaphore * = STRUCT (link * : Node)
  1002.     nestCount * : INTEGER;
  1003.     waitQueue * : MinList;
  1004.     multipleLink -: SemaphoreRequest;
  1005.     owner     * : TaskPtr;
  1006.     queueCount* : INTEGER;
  1007.   END;
  1008.  
  1009. (****** Semaphore procure message (for use in V39 Procure/Vacate ****)
  1010.  
  1011.   SemaphoreMessage * = STRUCT (message *: Message)
  1012.     semaphore * :SignalSemaphorePtr;
  1013.    END;
  1014.  
  1015. CONST
  1016.   shared    * = 1;
  1017.   exclusive * = 0;
  1018.  
  1019. TYPE
  1020.   MsgPortLockMsg * = STRUCT (node * : Node)
  1021.     flags * : SHORTINT;
  1022.     sigBit * : SHORTINT;     (* signal bit number    *)
  1023.     lockMsg* : MessagePtr;   (* object to be signalled *) (* may be other type [hG] *)
  1024.     msgList* : List;         (* message linked list  *)
  1025.   END;
  1026.  
  1027. (****** Semaphore (Old Procure/Vacate type, not reliable) ***********)
  1028.  
  1029.   Semaphore * = STRUCT (msgPort * : MsgPort)  (* Do not use these semaphores! *)
  1030.     bids    * : INTEGER;
  1031.   END;
  1032.  
  1033.  
  1034. VAR
  1035.   AbsExecBase * [4H] : ExecBasePtr; (* absolute exec base, avoid to use this *)
  1036. (* $IF Implementation *)
  1037.   SysBase     *      : ExecBasePtr; (* exec base, use this!                  *)
  1038.   exec        *      : ExecBasePtr; (* obsolety, included for compatibility  *)
  1039. (* $ELSE *)
  1040.   SysBase     * [4H] : ExecBasePtr; (* see above *)
  1041.   exec        * [4H] : ExecBasePtr;
  1042. (* $END *)
  1043.  
  1044. (* ------ misc ---------------------------------------------------------*)
  1045. PROCEDURE Supervisor   *{SysBase,- 30}(userFunction{13}: PROC): APTR;
  1046. PROCEDURE ExitIntr     *{SysBase,- 36};
  1047. PROCEDURE Schedule     *{SysBase,- 42};
  1048. PROCEDURE Reschedule   *{SysBase,- 48};
  1049. PROCEDURE Switch       *{SysBase,- 54};
  1050. PROCEDURE Dispatch     *{SysBase,- 60};
  1051. PROCEDURE Exception    *{SysBase,- 66};
  1052. (* ------ special patchable hooks to internal exec activity ------------*)
  1053. (* ------ module creation ----------------------------------------------*)
  1054. PROCEDURE InitCode     *{SysBase,- 72}(startClass{0}: SHORTSET;
  1055.                                        version{1}: LONGINT);
  1056. PROCEDURE InitStruct   *{SysBase,- 78}(initTable{9}: APTR;
  1057.                                        memory{10}: APTR;
  1058.                                        size{0}: LONGINT);
  1059. PROCEDURE MakeLibrary  *{SysBase,- 84}(funcInit{8}   : APTR;
  1060.                                        structInit{9} : APTR;
  1061.                                        libInit{10}   : PROC;
  1062.                                        dataSize{0}   : LONGINT;
  1063.                                        segList{1}    : BPTR): LibraryPtr;
  1064. PROCEDURE MakeFunctions*{SysBase,- 90}(target{8}     : APTR;
  1065.                                        funcArray{9}  : APTR;
  1066.                                        funcDisplBase{10}: APTR);
  1067. PROCEDURE FindResident *{SysBase,- 96}(name{9}       : ARRAY OF CHAR): ResidentPtr;
  1068. PROCEDURE InitResident *{SysBase,-102}(resident{9}   : ResidentPtr;
  1069.                                        segList{1}    : BPTR);
  1070. (* ------ diagnostics --------------------------------------------------*)
  1071. PROCEDURE Alert        *{SysBase,-108}(alertNum{7}   : LONGINT);
  1072. PROCEDURE Debug        *{SysBase,-114}(flags{0}      : LONGSET);
  1073. (* ------ interrupts ---------------------------------------------------*)
  1074. PROCEDURE Disable      *{SysBase,-120};
  1075. PROCEDURE Enable       *{SysBase,-126};
  1076. PROCEDURE Forbid       *{SysBase,-132};
  1077. PROCEDURE Permit       *{SysBase,-138};
  1078. PROCEDURE SetSR        *{SysBase,-144}(newSR{0}      : SET;
  1079.                                        mask{1}       : SET): SET;
  1080. PROCEDURE SuperState   *{SysBase,-150};
  1081. PROCEDURE UserState    *{SysBase,-156}(sysStack{0}   : APTR);
  1082. PROCEDURE SetIntVector *{SysBase,-162}(intNumber{0}  : LONGINT;
  1083.                                        interrupt{9}  : InterruptPtr): InterruptPtr;
  1084. PROCEDURE AddIntServer *{SysBase,-168}(intNumber{0}  : LONGINT;
  1085.                                        interrupt{9}  : InterruptPtr);
  1086. PROCEDURE RemIntServer *{SysBase,-174}(intNumber{0}  : LONGINT;
  1087.                                        interrupt{9}  : InterruptPtr);
  1088. PROCEDURE Cause        *{SysBase,-180}(interrupt{9}  : InterruptPtr);
  1089. (* ------ memory allocation --------------------------------------------*)
  1090. PROCEDURE Allocate     *{SysBase,-186}(freeList{8}   : MemHeaderPtr;
  1091.                                        byteSize{0}   : LONGINT): APTR;
  1092. PROCEDURE Deallocate   *{SysBase,-192}(freeList{8}   : MemHeaderPtr;
  1093.                                        memoryBlock{9}: APTR;
  1094.                                        byteSize{0}   : LONGINT);
  1095. PROCEDURE AllocMem     *{SysBase,-198}(byteSize{0}   : LONGINT;
  1096.                                        requirements{1}: LONGSET): APTR;
  1097. PROCEDURE AllocAbs     *{SysBase,-204}(byteSize{0}   : LONGINT;
  1098.                                        location{9}   : APTR): APTR;
  1099. PROCEDURE FreeMem      *{SysBase,-210}(memoryBlock{9}: APTR;
  1100.                                        byteSize{0}   : LONGINT);
  1101. PROCEDURE AvailMem     *{SysBase,-216}(requirements{1}: LONGSET): LONGINT;
  1102. PROCEDURE AllocEntry   *{SysBase,-222}(memList{8}    : APTR): APTR;
  1103. PROCEDURE FreeEntry    *{SysBase,-228}(entry{8}      : APTR);
  1104. (* ------ lists --------------------------------------------------------*)
  1105. PROCEDURE Insert       *{SysBase,-234}(VAR list{8}   : CommonList;
  1106.                                        node{9}       : CommonNodePtr;
  1107.                                        pred{10}      : CommonNodePtr);
  1108. PROCEDURE AddHead      *{SysBase,-240}(VAR list{8}   : CommonList;
  1109.                                        node{9}       : CommonNodePtr);
  1110. PROCEDURE AddTail      *{SysBase,-246}(VAR list{8}   : CommonList;
  1111.                                        node{9}       : CommonNodePtr);
  1112. PROCEDURE Remove       *{SysBase,-252}(node{9}       : CommonNodePtr);
  1113. PROCEDURE RemHead      *{SysBase,-258}(VAR list{8}   : CommonList): CommonNodePtr;
  1114. PROCEDURE RemTail      *{SysBase,-264}(VAR list{8}   : CommonList): CommonNodePtr;
  1115. PROCEDURE Enqueue      *{SysBase,-270}(VAR list{8}   : CommonList;
  1116.                                        node{9}       : CommonNodePtr);
  1117. PROCEDURE FindName     *{SysBase,-276}(VAR list{8}   : CommonList;
  1118.                                        name{9}       : ARRAY OF CHAR): CommonNodePtr;
  1119. (* ------ tasks --------------------------------------------------------*)
  1120. PROCEDURE AddTask      *{SysBase,-282}(task{9}       : TaskPtr;
  1121.                                        initPC{10}    : PROC;
  1122.                                        finalPC{11}   : APTR);
  1123. PROCEDURE RemTask      *{SysBase,-288}(task{9}       : TaskPtr);
  1124. PROCEDURE FindTask     *{SysBase,-294}(name{9}       : ARRAY OF CHAR): TaskPtr;
  1125. PROCEDURE SetTaskPri   *{SysBase,-300}(task{9}       : TaskPtr;
  1126.                                        priority{0}   : LONGINT): SHORTINT;
  1127. PROCEDURE SetSignal    *{SysBase,-306}(newSignals{0} : LONGSET;
  1128.                                        signalSet{1}  : LONGSET): LONGSET;
  1129. PROCEDURE SetExcept    *{SysBase,-312}(newSignals{0} : LONGSET;
  1130.                                        signalSet{1}  : LONGSET): LONGSET;
  1131. PROCEDURE Wait         *{SysBase,-318}(signalSet{0}  : LONGSET): LONGSET;
  1132. PROCEDURE Signal       *{SysBase,-324}(task{9}       : TaskPtr;
  1133.                                        signalSet{0}  : LONGSET);
  1134. PROCEDURE AllocSignal  *{SysBase,-330}(signalNum{0}  : LONGINT): SHORTINT;
  1135. PROCEDURE FreeSignal   *{SysBase,-336}(signalNum{0}  : LONGINT);
  1136. PROCEDURE AllocTrap    *{SysBase,-342}(trapNum{0}    : LONGINT): SHORTINT;
  1137. PROCEDURE FreeTrap     *{SysBase,-348}(trapNum{0}    : LONGINT);
  1138. (* ------ messages -----------------------------------------------------*)
  1139. PROCEDURE AddPort      *{SysBase,-354}(port{9}       : MsgPortPtr);
  1140. PROCEDURE RemPort      *{SysBase,-360}(port{9}       : MsgPortPtr);
  1141. PROCEDURE PutMsg       *{SysBase,-366}(port{8}       : MsgPortPtr;
  1142.                                        message{9}    : MessagePtr);
  1143. PROCEDURE GetMsg       *{SysBase,-372}(port{8}       : MsgPortPtr): MessagePtr;
  1144. PROCEDURE ReplyMsg     *{SysBase,-378}(message{9}    : MessagePtr);
  1145. PROCEDURE WaitPort     *{SysBase,-384}(port{8}       : MsgPortPtr);
  1146. PROCEDURE FindPort     *{SysBase,-390}(name{9}       : ARRAY OF CHAR): MsgPortPtr;
  1147. (* ------ libraries ----------------------------------------------------*)
  1148. PROCEDURE AddLibrary   *{SysBase,-396}(library{9}    : LibraryPtr);
  1149. PROCEDURE RemLibrary   *{SysBase,-402}(library{9}    : LibraryPtr);
  1150. PROCEDURE OldOpenLibrary*{SysBase,-408}(name{9}      : ARRAY OF CHAR): LibraryPtr;
  1151. PROCEDURE CloseLibrary *{SysBase,-414}(library{9}    : LibraryPtr);
  1152. PROCEDURE SetFunction  *{SysBase,-420}(library{9}    : LibraryPtr;
  1153.                                        funcOffset{8} : LONGINT;
  1154.                                        newFunction{0}: PROC): PROC;
  1155. PROCEDURE SumLibrary   *{SysBase,-426}(library{9}    : LibraryPtr);
  1156. (* ------ devices ------------------------------------------------------*)
  1157. PROCEDURE AddDevice    *{SysBase,-432}(device{9}     : DevicePtr);
  1158. PROCEDURE RemDevice    *{SysBase,-438}(device{9}     : DevicePtr);
  1159. PROCEDURE OpenDevice   *{SysBase,-444}(devName{8}    : ARRAY OF CHAR;
  1160.                                        unit{0}       : LONGINT;
  1161.                                        ioRequest{9}  : MessagePtr;
  1162.                                        flags{1}      : LONGSET): SHORTINT;
  1163. PROCEDURE CloseDevice  *{SysBase,-450}(ioRequest{9}  : MessagePtr);
  1164. PROCEDURE DoIO         *{SysBase,-456}(ioRequest{9}  : MessagePtr): SHORTINT;
  1165. PROCEDURE OldDoIO      *{SysBase,-456}(ioRequest{9}  : MessagePtr); (* same w/o result *)
  1166. PROCEDURE SendIO       *{SysBase,-462}(ioRequest{9}  : MessagePtr);
  1167. PROCEDURE CheckIO      *{SysBase,-468}(ioRequest{9}  : MessagePtr): IORequestPtr;
  1168. PROCEDURE WaitIO       *{SysBase,-474}(ioRequest{9}  : MessagePtr): SHORTINT;
  1169. PROCEDURE OldWaitIO    *{SysBase,-474}(ioRequest{9}  : MessagePtr); (* same w/o result *)
  1170. PROCEDURE AbortIO      *{SysBase,-480}(ioRequest{9}  : MessagePtr);
  1171. (* ------ resources ----------------------------------------------------*)
  1172. PROCEDURE AddResource  *{SysBase,-486}(resource{9}   : APTR);
  1173. PROCEDURE RemResource  *{SysBase,-492}(resource{9}   : APTR);
  1174. PROCEDURE OpenResource *{SysBase,-498}(resName{9}    : ARRAY OF CHAR): APTR;
  1175. (* ------ private diagnostic support -----------------------------------*)
  1176. (* ------ misc ---------------------------------------------------------*)
  1177. PROCEDURE RawIOInit    *{SysBase,-504};
  1178. PROCEDURE RawMayGetChar*{SysBase,-510};
  1179. PROCEDURE RawPutChar   *{SysBase,-516};
  1180. PROCEDURE RawDoFmt     *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1181.                                        dataStream{9} : APTR;
  1182.                                        putChProc{10} : PROC;
  1183.                                        putChData{11} : APTR): APTR;
  1184. PROCEDURE RawDoFmtL    *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1185.                                        dataStream{9} : ARRAY OF SYSTEM.BYTE;
  1186.                                        putChProc{10} : PROC;
  1187.                                        putChData{11} : APTR): APTR;
  1188. PROCEDURE OldRawDoFmt  *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1189.                                        dataStream{9} : APTR;
  1190.                                        putChProc{10} : PROC;
  1191.                                        putChData{11} : APTR);
  1192. PROCEDURE OldRawDoFmtL *{SysBase,-522}(formatStr{8}  : ARRAY OF CHAR;
  1193.                                        dataStream{9} : ARRAY OF SYSTEM.BYTE;
  1194.                                        putChProc{10} : PROC;
  1195.                                        putChData{11} : APTR);
  1196. PROCEDURE GetCC        *{SysBase,-528}(): SET;
  1197. PROCEDURE TypeOfMem    *{SysBase,-534}(address{9}    : APTR): LONGSET;
  1198. PROCEDURE Procure      *{SysBase,-540}(VAR sigSem{8} : Semaphore;
  1199.                                        bidMsg{9}     : SemaphoreMessagePtr): BOOLEAN;
  1200. PROCEDURE Vacate       *{SysBase,-546}(VAR sigSem{8} : Semaphore;
  1201.                                        bidMsg{9}     : SemaphoreMessagePtr): BOOLEAN;
  1202. PROCEDURE OpenLibrary  *{SysBase,-552}(libName{9}    : ARRAY OF CHAR;
  1203.                                        version{0}    : LONGINT): LibraryPtr;
  1204. (* --- functions in V33 or higher (Release 1.2) ---*)
  1205. (* ------ signal semaphores (note funny registers)----------------------*)
  1206. PROCEDURE InitSemaphore*{SysBase,-558}(VAR sigSem{8} : SignalSemaphore);
  1207. PROCEDURE ObtainSemaphore*{SysBase,-564}(VAR sigSem{8}: SignalSemaphore);
  1208. PROCEDURE ReleaseSemaphore*{SysBase,-570}(VAR sigSem{8}: SignalSemaphore);
  1209. PROCEDURE AttemptSemaphore*{SysBase,-576}(VAR sigSem{8}: SignalSemaphore): BOOLEAN;
  1210. PROCEDURE ObtainSemaphoreList*{SysBase,-582}(VAR sigSem{8}: List);
  1211. PROCEDURE ReleaseSemaphoreList*{SysBase,-588}(VAR sigSem{8}: List);
  1212. PROCEDURE FindSemaphore*{SysBase,-594}(sigSem{9}     : ARRAY OF CHAR): SignalSemaphorePtr;
  1213. PROCEDURE AddSemaphore *{SysBase,-600}(VAR sigSem{9} : SignalSemaphore);
  1214. PROCEDURE RemSemaphore *{SysBase,-606}(VAR sigSem{9} : SignalSemaphore);
  1215. (* ------ kickmem support ----------------------------------------------*)
  1216. PROCEDURE SumKickData  *{SysBase,-612}(): LONGINT;
  1217. (* ------ more memory support ------------------------------------------*)
  1218. PROCEDURE AddMemList   *{SysBase,-618}(size{0}       : LONGINT;
  1219.                                        attributes{1} : LONGSET;
  1220.                                        pri{2}        : LONGINT;
  1221.                                        base{8}       : APTR;
  1222.                                        name{9}       : ARRAY OF CHAR);
  1223. PROCEDURE CopyMem      *{SysBase,-624}(source{8}     : ARRAY OF BYTE;
  1224.                                        dest{9}       : ARRAY OF BYTE;
  1225.                                        size{0}       : LONGINT);
  1226. PROCEDURE CopyMemAPTR  *{SysBase,-624}(source{8}     : APTR;   (* equivalent to CopyMem, uses ptrs instead *)
  1227.                                        dest{9}       : APTR;
  1228.                                        size{0}       : LONGINT);
  1229. PROCEDURE CopyMemQuick *{SysBase,-630}(source{8}     : ARRAY OF BYTE;
  1230.                                        dest{9}       : ARRAY OF BYTE;
  1231.                                        size{0}       : LONGINT);
  1232. PROCEDURE CopyMemQuickAPTR*{SysBase,-630}(source{8}  : APTR;   (* equivalent to CopyMemQuick, uses ptrs instead *)
  1233.                                        dest{9}       : APTR;
  1234.                                        size{0}       : LONGINT);
  1235.  
  1236. (* --- functions in V36 or higher (dRelease 2.0)      --- *)
  1237. (* --- REMEMBER: You are to check the version BEFORE you use this ! --- *)
  1238.  
  1239. (* ------ cache --------------------------------------------------------*)
  1240. PROCEDURE CacheClearU  *{SysBase,-636}();
  1241. PROCEDURE CacheClearE  *{SysBase,-642}(address{8}    : APTR;
  1242.                                        length{0}     : LONGINT;
  1243.                                        caches{1}     : LONGSET);
  1244. PROCEDURE CacheControl *{SysBase,-648}(cacheBits{0}  : LONGSET;
  1245.                                        cacheMask{1}  : LONGSET): LONGSET;
  1246. (* ------ misc ---------------------------------------------------------*)
  1247. PROCEDURE CreateIORequest*{SysBase,-654}(port{8}     : MsgPortPtr;
  1248.                                          size{0}     : LONGINT): MessagePtr;
  1249. PROCEDURE DeleteIORequest*{SysBase,-660}(iorequest{8}: MessagePtr);
  1250. PROCEDURE CreateMsgPort*{SysBase,-666}(): MsgPortPtr;
  1251. PROCEDURE DeleteMsgPort*{SysBase,-672}(port{8}: MsgPortPtr);
  1252. PROCEDURE ObtainSemaphoreShared*{SysBase,-678}(VAR sigSem{8}: SignalSemaphore);
  1253. (* ------ even more memory support -------------------------------------*)
  1254. PROCEDURE AllocVec     *{SysBase,-684}(byteSize{0}   : LONGINT;
  1255.                                        requirements{1}:LONGSET ): APTR;
  1256. PROCEDURE FreeVec      *{SysBase,-690}(memoryBlock{9}: APTR);
  1257. (*------ V39 Pool LVOs...*)
  1258. PROCEDURE CreatePool   *{SysBase,-696}(requirements{0}: LONGSET;
  1259.                                        puddleSize{1} : LONGINT;
  1260.                                        threshSize{2} : LONGINT): MemPoolPtr;
  1261. PROCEDURE DeletePool   *{SysBase,-702}(poolHeader{8} : MemPoolPtr);
  1262. PROCEDURE AllocPooled  *{SysBase,-708}(poolHeader{8} : MemPoolPtr;
  1263.                                        memSize{0}    : LONGINT): APTR;
  1264. PROCEDURE FreePooled   *{SysBase,-714}(poolHeader{8} : MemPoolPtr;
  1265.                                        memory{9}     : APTR;
  1266.                                        memSize{0}    : LONGINT);
  1267. (* ------ misc ---------------------------------------------------------*)
  1268. PROCEDURE AttemptSemaphoreShared*{SysBase,-720}(VAR sigSem{8}: SignalSemaphore): BOOLEAN;
  1269. PROCEDURE ColdReboot   *{SysBase,-726};
  1270. PROCEDURE StackSwap    *{SysBase,-732}(VAR newStack{8}: StackSwapStruct);
  1271. (* ------ task trees ---------------------------------------------------*)
  1272. PROCEDURE ChildFree    *{SysBase,-738}(tid{0}        : APTR);
  1273. PROCEDURE ChildOrphan  *{SysBase,-744}(tid{0}        : APTR);
  1274. PROCEDURE ChildStatus  *{SysBase,-750}(tid{0}        : APTR);
  1275. PROCEDURE ChildWait    *{SysBase,-756}(tid{0}        : APTR);
  1276. (*------ future expansion ---------------------------------------------*)
  1277. PROCEDURE CachePreDMA  *{SysBase,-762}(address{8}   : APTR;
  1278.                                        VAR length{9}: LONGINT;
  1279.                                        flags{0}     : LONGINT): APTR;
  1280. PROCEDURE CachePostDMA *{SysBase,-768}(address{8}   : APTR;
  1281.                                        VAR length{9}: LONGINT;
  1282.                                        flags{0}     : LONGINT);
  1283. (*------ New, for V39 -------------------------------------------------*)
  1284. (*--- functions in V39 or higher (Release 3) ---*)
  1285. (*------ Low memory handler functions ---------------------------------*)
  1286. PROCEDURE AddMemHandler  *{SysBase,-774}(memHand{1} : InterruptPtr);
  1287. PROCEDURE RemMemHandler  *{SysBase,-780}(memHand{1} : InterruptPtr);
  1288. (*------ Function to attempt to obtain a Quick Interrupt Vector...*)
  1289. PROCEDURE ObtainQuickVector *{SysBase,-786}(interruptCode{8}: APTR): LONGINT;
  1290.  
  1291. (* $IF Implementation *)
  1292. BEGIN
  1293.   SysBase := AbsExecBase;
  1294.   exec    := SysBase;
  1295. (* $END *)
  1296.  
  1297. END Exec.
  1298.  
  1299.